其實ngrok有客戶端ngrok和服務端ngrokd,在用戶客戶端發起請求時,就是這兩個端起作用轉發請求
1.當服務端接收到連接,就讀取映射表,判斷接收的端口對應於哪一個客戶端,然後向客戶端評論數據。
2.客戶端收到數據,讀取本地映射表,判斷對應哪個內網地址,向內網地址發起連接。
3.客戶端和內網的服務器建立連接後,向服務端發起一個連接,作為評論通道。
4.服務端讀取請求數據,並通過轉發反饋到客戶端,客戶端讀取響應並通過反饋返回請求。
我們可以看到如果要轉發數據,一定要ngrok客戶端和服務端建立鏈路通道,這樣就可以將請求數據轉發到我們的內網服務器。
LINE Bot應用程式(APP)都完備後,接下來就要讓網址能夠公開(Public)且具有HTTPS,LINE頻道(Channel)才有辦法連結。
這時候除了可以將LINE Bot應用程式(APP)部署到像Heroku雲端平台,擁有對外公開的HTTPS網址外,還可以使用一個非常強大的工具-Ngrok。
Ngrok簡單來說,就是能夠將你本機的IP埠號(http://127.0.0.1:8000),對應到一個隨機產生的HTTPS網址,並且這個HTTPS網址是對外公開的(Public)的,這時候外部使用者只要透過這個HTTPS網址,就能夠存取本機所運行的服務,是不是非常的強大阿。
首先,前往Ngrok官網,如下圖:
點擊「Get started for free」後,會需要註冊一個帳戶,接著就會看到如下圖的畫面:
依據作業系統進行下載即可,而這邊要特別注意的是,在下方會有專屬於你的憑證(Token),如下圖:
將下載的檔案解壓縮,並且執行後,需要輸入以下的指令進行驗證:
ngrok authtoken
接著,就可以透過Ngrok,將本機的埠號對外公開,以本文為例,Django在本機運行的埠號為8000,所以輸入以下的指令:
./ngrok http 8000
執行結果
Ngrok就會隨機產生一個HTTPS的網址,只要把這個網址填入LINE Webhook URL,以及LINE Bot應用程式(APP) settings.py檔案中的ALLOWED_HOSTS,如下範例,LINE頻道(Channel)就能夠與LINE Bot應用程式(APP)互相連結:
ALLOWED_HOSTS = [
'cf3fb14f6910.ngrok.io' #允許的網域名稱
]
接著,利用以下的指令執行LINE Bot應用程式(APP):
python manage.py runserver
今天的歌曲是 周杰倫-世界未末日 Not the End of the World
https://www.youtube.com/watch?v=IteE-HMVJ1M&list=PLFl6Na2uUoOZBEhBtQ_jeGA4P1V20JvpW&index=7&ab_channel=%E5%91%A8%E6%9D%B0%E5%80%ABJayChou